﻿package com.eitb.programas.multimediaAutomatico{
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;
	import flash.utils.*;
	import com.eitb.cargadores.*;
	import com.eitb.formaters.*;
	import com.eitb.literales.*;
	import com.eitb.programas.multimediaAutomatico.rutas.*;

	public class ModeloMultimediaAutomatico implements IControladorMultimediaAutomatico, IControladorCargador {
		private var vMultimediaAutomatico:IVistaMultimediaAutomatico;
		private var vImagenesAutomaticas:IVistaImagenesAutomaticas; 
		private var vTextosAutomaticos:IVistaTextosAutomaticos; 
		private var vCargador:IVistaCargador;

		private var xmlData:XML;
		private var textosXml:XMLList;
		private var imagenesXml:XMLList;

		private var cargando:Boolean;
		private var nImagen:int;
		
		private var idioma:int;
		private var literalesCargador:ILiterales;
		

		public function ModeloMultimediaAutomatico():void {
			this.cargando = false;
			this.nImagen = 0;
		}
		
		public function initVista(vMultimediaAutomatico:IVistaMultimediaAutomatico):void {
			this.vMultimediaAutomatico = vMultimediaAutomatico;
		}

		public function initIdioma(idioma:int):void {
			this.idioma = idioma;
		}

		// CARGADOR
		public function initVistaCargador(vCargador:IVistaCargador):void {
			this.vCargador = vCargador;
		}

		public function initLiteralesCargador(literales:ILiterales) {
			this.literalesCargador = literales;
			this.vCargador.setCargadorInfo(this.literalesCargador.getLiteral(CargadorLiterales.DESCARGANDO));
		}
		// CARGADOR
		
		// IMAGENES
		public function initVistaImagenesAutomaticas(vImagenesAutomaticas:IVistaImagenesAutomaticas):void {
			this.vImagenesAutomaticas = vImagenesAutomaticas;
		}
		public function initXmlImagenes(imagenesXml:XMLList):void {
			this.imagenesXml=imagenesXml;
		}
		// IMAGENES

		// TEXTOS
		public function initVistaTextosAutomaticos(vTextosAutomaticos:IVistaTextosAutomaticos):void {
			this.vTextosAutomaticos = vTextosAutomaticos;
		}
		public function initXmlTextos(textosXml:XMLList):void {
			this.textosXml=textosXml;
			this.vTextosAutomaticos.setTextos(textosXml);
		}
		// TEXTOS
			
		// CARGADOR
		public function addElementos(numero:int):void {
		}
		public function removeElementos(numero:int):void {
		}
		private function setInfo(porcentaje:Number):void {
			this.vCargador.setCargadorContador(new PercentFormater(porcentaje).format(this.idioma));	
			this.vCargador.setCargadorProgress(porcentaje);			
			this.vCargador.setCargadorVisible(porcentaje != 1);
		}			
		// CARGADOR
		// CARGA IMAGENES
		public function loadImagenes():void {
			if (! this.cargando) {
				var loader:Loader;
				var archivo:URLRequest;

				for each (var imagen in this.imagenesXml..imagen) {
					loader=new Loader();
					archivo= new Rutas().getImagen(imagen);
					this.configureListeners(loader.contentLoaderInfo);
					try {
						loader.load(archivo);
					} catch (error:Error) {
						trace("Unable to load requested document.");
					}
				}
			}
		}

		private function completeHandler(event:Event):void {
			var loader:Loader=Loader(event.target.loader);
			var bitmap:Bitmap=Bitmap(loader.content);
			this.removeElementos(1);
			bitmap.cacheAsBitmap=true;
			bitmap.width = this.vImagenesAutomaticas.getImagenWidth(this.nImagen);
			bitmap.height = this.vImagenesAutomaticas.getImagenHeight(this.nImagen);
			this.vImagenesAutomaticas.setImagenBitmap(this.nImagen, bitmap);
			this.nImagen+= 1;
			this.setInfo(1);
		}

		private function initHandler(event:Event):void {
			this.cargando=true;
			this.setInfo(0);
		}

		private function progressHandler(event:ProgressEvent):void {
			this.setInfo(event.bytesLoaded / event.bytesTotal);
		}

		private function configureListeners(dispatcher:IEventDispatcher):void {
			dispatcher.addEventListener(Event.COMPLETE,completeHandler);
			dispatcher.addEventListener(Event.INIT,initHandler);
			dispatcher.addEventListener(ProgressEvent.PROGRESS,progressHandler);
		}
		// CARGA IMAGENES
	}
}